package com.bipa.service;

import com.bipa.bean.User;
import com.bipa.dao.UserDao;
import com.sun.mail.smtp.SMTPMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import java.util.List;
import java.util.Properties;
import java.util.UUID;

@Service
public class UserService {

    @Autowired
    UserDao userDao;

    /**
     *
     * @param account
     * @param psw
     * @return
     */
    public User checkLogin(String account, String psw){
        return userDao.findByAccountOrPsw(account,psw);
    }

    /**
     *
     * @param user
     * @param proPath
     * @return
     */
    public int  register(User user, String proPath){
        try {
            //通过uuid生成激活码
            String active = UUID.randomUUID().toString();
            user.setActive(active);
            int rs = userDao.register(user);
            //判断用户的角色，如果是普通会员则发送邮件给用户
            //if(user.getRole() == 1) {
                //发送邮件
                sendMail(user,proPath);

           // }
            return rs;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("注册失败:"+e.getMessage());
        }

    }

    /**
     *
     * @param user
     * @param proPath
     */
    private void sendMail(User user, String proPath) {
        try {
            //1、创建 Properties对象，用于封装邮件发送相关信息
            Properties props = new Properties();
            // 服务器地址
            props.setProperty("mail.smtp.host", "smtp.126.com");
            // 服务器需要鉴权
            props.setProperty("mail.smtp.auth", "true");

            // 2).创建Authenticator的实例，实现账户、密码的鉴权。
            Authenticator auth = new Authenticator(){
                protected PasswordAuthentication getPasswordAuthentication()
                {
                    return new PasswordAuthentication("tbipaj@126.com", "GNNWIKEEXAOOYLVN");
                }
            };

            //3、创建Session对象//GNNWIKEEXAOOYLVN
            Session session = Session.getInstance(props, auth);
            //4).创建SMTPMessage，通过SMTPMessage指定收件人|发送人|邮件内容等信息，要提供session(连接)
            SMTPMessage msg = new SMTPMessage(session);
            //指定邮件的主体
            msg.setSubject("用户注册激活邮件，请勿回复，按照提示进行操作即可");
            //指定邮件内容
            msg.setContent("<a href='http://127.0.0.1:8080"+proPath+"/userActive?active="+user.getActive()+"' target='_blank'>点击该连接进行激活</a>","text/html;charset=UTF-8");
            //指定发件人
            msg.setFrom(new InternetAddress("tbipaj@126.com"));
            //指定收件人   接收者类型由：TO(收件人)、CC(抄送)、BCC(密送)
            msg.setRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail()));

            //5、发送邮件
            Transport.send(msg);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

    public void activeUser(String activeCode) {
        // TODO Auto-generated method stub
        userDao.activeUser(activeCode);
    }

    public List<User> getAllManageUser(){
        return userDao.getAllManageUser();
    }

    public User findById(Integer id){
        return userDao.findById(id);
    }

    public void update(User user){
        userDao.update(user);
    }

}
